package com.home_school_platform.dao;

import com.home_school_platform.entity.pojo.Achievement;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * @authoor Bilysen
 * @date 2021/3/11 - 19:56
 **/
@Mapper
@Repository
public interface AchievementDao {
    /**
     * 上传学生成绩
     * @param achievement  achievement 对象
     * @return 所添加的行数
     */
    Integer insertAchievement(Achievement achievement);

    /**
     * 根据主键删除某人成绩
     * @param id
     * @return 所删除的行数
     */
    Integer deleteAchievement(Integer id);

    /**
     * 删除某学校某个班的某次考试全部成绩
     * @param map 封装了titleId，createSchoolId，teamId
     * @return 所删除的成绩行数
     */
    Integer deleteAchievementBySchoolTeam(Map map);

    /**
     * 修改某一成绩
     * @param achievement 成绩实体类
     * @return 修改的行数
     */
    Integer updateAchievement(Achievement achievement);

    /**
     * 通过id获取某项成绩
     * @param id
     * @return achievement 对象
     */
//    Achievement getAchievement(Integer id);

    /**
     * 查询某学生某次考试的成绩
     * 这个方法也可以获得这个同学本班的考试科目
     * @param map 封装titleId studentId
     * @return list
     */
    List<Achievement> listAchievementByStudent(Map map);

    /**
     * 查询某学生某次考试的某科成绩
     * @param titleId 考试标题
     * @param studentId 学生id（全场唯一，有学生id即可知道学校和班级以及学生）
     * @param type 科目
     * @return
     */
    Achievement getAchievementByStudentType(@Param("titleId") Integer titleId,
                                            @Param("studentId") Integer studentId,
                                            @Param("type") String type);

    /**
     * 查询成绩列表
     * @param currentPage 当前页面
     * @param pageSize 每个页面的大小
     * @return list 列表
     */
//    List<Achievement> listAchievement(@Param("currentPage") Integer currentPage,
//                                      @Param("pageSize") Integer pageSize);

    /**
     * 统计成绩列表的数量
     * @return int 列表个数
     */
//    Integer countListAchievement();

    /**
     * 查询某次考试某班的成绩(没有进行分页，这里还需讨论)
     * 按学生id顺序输出，提高了效率
     * @param map 封装 titleId teamId
     * @return list
     */
    List<Achievement> listAchievementBySchoolTeam(Map map);

    /**
     * 查询某次考试某班某科全部学生的成绩并分页
     * @param titleId 考试标题id
     * @param createSchoolId 学校
     * @param teamId 班级
     * @param type 科目
     * @param currentPage 第几个数据
     * @param pageSize 页面大小
     * @return list
     */
    List<Achievement> listAchievementBySchoolTeamType(@Param("titleId") Integer titleId,
                                                      @Param("createSchoolId") Integer createSchoolId,
                                                      @Param("teamId") Integer teamId,
                                                      @Param("type") String type,
                                                      @Param("currentPage")Integer currentPage,
                                                      @Param("pageSize")Integer pageSize);

    /**
     * 统计某次考试某班某科全部学生的成绩并分页
     * @param titleId 考试标题id
     * @param createSchoolId 学校
     * @param teamId 班级
     * @param type 科目
     * @return integer
     */
    Integer countListAchievementBySchoolTeamType(@Param("titleId") Integer titleId,
                                         @Param("createSchoolId") Integer createSchoolId,
                                         @Param("teamId") Integer teamId,
                                         @Param("type") String type);


}
